package leetcode.leetcode19;

/**
 * @author czt
 * @version 1.0
 * @since 2024/12/18
 *
 * 删除倒数节点
 */
public class Leetcode19 {

    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode s = new ListNode(-1, head);
        recursion(s, n);

        return s.next;
    }

    /**
     * 递归
     * @param p 节点
     * @param n 倒数第几个
     * @return 倒数的位置
     * 4  3  2  1   0
     * 1->2->3->4->null
     */
    private int recursion(ListNode p, int n) {
        // 倒着数，第0个元素
        if (p == null) {
            return 0;
        }
        // 下一个节点的倒数位置
        int nth = recursion(p.next, n);

        if (nth == n) {
            p.next = p.next.next;
        }

        // 当前节点的倒数位置
        return nth + 1;
    }


}
